/**
 * Ant Design Pro v4 use `@ant-design/pro-layout` to handle Layout.
 * You can view component api by:
 * https://github.com/ant-design/ant-design-pro-layout
 */
import ProLayout, { SettingDrawer } from '@ant-design/pro-layout';
import React, { useState, useEffect } from 'react';
import Link from 'umi/link';
import { connect } from 'dva';
import { formatMessage } from 'umi-plugin-react/locale';
import Authorized from '@/utils/Authorized';
import RightContent from '@/components/GlobalHeader/RightContent';
// import SettingDrawer from '@/components/SettingDrawer';
// import SettingDrawer from '../components/SettingDrawer';
import { isAntDesignPro } from '@/utils/utils';
import logo from '../assets/logo.svg';
/**
 * use Authorized check all menu item
 */

const menuDataRender = menuList =>
  menuList.map(item => {
    const localItem = { ...item, children: item.children ? menuDataRender(item.children) : [] };
    return Authorized.check(item.authority, localItem, null);
  });

const footerRender = (_, defaultDom) => {
  return (
    <>
      {/*<div*/}
        {/*style={{*/}
          {/*padding: '0px 24px 24px',*/}
          {/*textAlign: 'center',*/}
        {/*}}*/}
      {/*>*/}
        {/*<a href="https://www.netlify.com" target="_blank" rel="noopener noreferrer">*/}
          {/*<img*/}
            {/*src="https://www.netlify.com/img/global/badges/netlify-color-bg.svg"*/}
            {/*width="82px"*/}
            {/*alt="netlify logo"*/}
          {/*/>*/}
        {/*</a>*/}
      {/*</div>*/}
    </>
  );
};
// const footerRender = (_, defaultDom) => {
//   if (!isAntDesignPro()) {
//     return defaultDom;
//   }
//
//   return (
//     <>
//       {defaultDom}
//       <div
//         style={{
//           padding: '0px 24px 24px',
//           textAlign: 'center',
//         }}
//       >
//         <a href="https://www.netlify.com" target="_blank" rel="noopener noreferrer">
//           <img
//             src="https://www.netlify.com/img/global/badges/netlify-color-bg.svg"
//             width="82px"
//             alt="netlify logo"
//           />
//         </a>
//       </div>
//     </>
//   );
// };


// class BasicLayout extends React.Component {
//   state = {
//     isReady: false,
//   };
//
//   componentDidMount() {
//     this.setState({
//       isReady: true,
//     });
//     const { dispatch } = this.props;
//
//     if (dispatch) {
//       dispatch({
//         type: 'user/fetchCurrent',
//         // callback:data => {
//         //   console.log('data', data);
//         //   setMenuData(data.menuData || []);
//         // }
//       });
//       dispatch({
//         type: 'settings/getSetting',
//       });
//     }
//   }
//
//   render() {
//     const { dispatch, children, settings, user:{currentUser} } = this.props;
//
//     console.log('currentUser', currentUser);
//     /**
//      * constructor
//      */
//
//     let menuData = currentUser && currentUser.menuData ? currentUser.menuData : [];
//     console.log('menuData', menuData);
//     console.log('settings', settings);
//
//
//     /**
//      * init variables
//      */
//
//     const handleMenuCollapse = payload => {
//       if (dispatch) {
//         dispatch({
//           type: 'global/changeLayoutCollapsed',
//           payload,
//         });
//       }
//     };
//
//     return (
//       <>
//       <ProLayout
//         logo={logo}
//         onCollapse={handleMenuCollapse}
//         menuItemRender={(menuItemProps, defaultDom) => {
//           if (menuItemProps.isUrl) {
//             return defaultDom;
//           }
//
//           return <Link to={menuItemProps.path}>{defaultDom}</Link>;
//         }}
//         breadcrumbRender={(routers = []) => [
//           {
//             path: '/',
//             breadcrumbName: formatMessage({
//               id: 'menu.home',
//               defaultMessage: 'Home',
//             }),
//           },
//           ...routers,
//         ]}
//         itemRender={(route, params, routes, paths) => {
//           const first = routes.indexOf(route) === 0;
//           return first ? (
//             <Link to={paths.join('/')}>{route.breadcrumbName}</Link>
//           ) : (
//             <span>{route.breadcrumbName}</span>
//           );
//         }}
//         footerRender={footerRender}
//         // menuDataRender={menuDataRender}
//         menuDataRender={()=>menuData}
//         formatMessage={formatMessage}
//         rightContentRender={rightProps => <RightContent {...rightProps} />}
//         {...this.props}
//         {...settings}
//       >
//         {children}
//       </ProLayout>
//       <SettingDrawer
//         settings={settings}
//         onSettingChange={config =>
//           dispatch({
//             type: 'settings/changeSetting',
//             payload: config,
//           })
//         }
//       />
//       </>
//     );
//   }
// }

const BasicLayout = props => {
  const { dispatch, children, settings} = props;
  const [menuData, setMenuData] = useState([]);

  /**
   * constructor
   */

  useEffect(() => {
    if (dispatch) {
      dispatch({
        type: 'user/fetchCurrent',
        callback:data => {
          console.log('data', data);
          setMenuData(data.menuData || []);
        }
      });
      dispatch({
        type: 'settings/getSetting',
      });
    }
  }, []);

  // console.log('menuData', menuData);
  // console.log('settings', settings);


  /**
   * init variables
   */

  const handleMenuCollapse = payload => {
    if (dispatch) {
      dispatch({
        type: 'global/changeLayoutCollapsed',
        payload,
      });
    }
  };

  return (
    <>
      <ProLayout
        logo={logo}
        onCollapse={handleMenuCollapse}
        menuItemRender={(menuItemProps, defaultDom) => {
          if (menuItemProps.isUrl) {
            return defaultDom;
          }

          return <Link to={menuItemProps.path}>{defaultDom}</Link>;
        }}
        breadcrumbRender={(routers = []) => [
          {
            path: '/',
            breadcrumbName: formatMessage({
              id: 'menu.home',
              defaultMessage: 'Home',
            }),
          },
          ...routers,
        ]}
        itemRender={(route, params, routes, paths) => {
          const first = routes.indexOf(route) === 0;
          return first ? (
            <Link to={paths.join('/')}>{route.breadcrumbName}</Link>
          ) : (
            <span>{route.breadcrumbName}</span>
          );
        }}
        footerRender={footerRender}
        // menuDataRender={menuDataRender}
        menuDataRender={()=>menuData}
        formatMessage={formatMessage}
        rightContentRender={rightProps => <RightContent {...rightProps} />}
        {...props}
        {...settings}
      >
        {children}
      </ProLayout>
      <SettingDrawer
        settings={settings}
        onSettingChange={config =>
          dispatch({
            type: 'settings/changeSetting',
            payload: config
          })
        }
      />
    </>
  );
};

export default connect(({ global, settings }) => ({
  collapsed: global.collapsed,
  settings,
}))(BasicLayout);
